using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._DataManagementTools._Raster._MosaicDataset
{
    /// <summary>
    /// <para>Repair Mosaic Dataset Paths</para>
    /// <para>Resets paths to source imagery if you have moved or copied a mosaic dataset.</para>
    /// <para>如果已移动或复制镶嵌数据集，则重置源影像的路径。</para>
    /// </summary>    
    [DisplayName("Repair Mosaic Dataset Paths")]
    public class RepairMosaicDatasetPaths : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public RepairMosaicDatasetPaths()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_in_mosaic_dataset">
        /// <para>Mosaic Dataset</para>
        /// <para>The mosaic dataset with the broken paths.</para>
        /// <para>具有断开路径的镶嵌数据集。</para>
        /// </param>
        /// <param name="_paths_list">
        /// <para>Paths List</para>
        /// <para>A list of the paths to remap. Include the current path stored in the mosaic dataset and the path to which it will be changed. You can enter an asterisk (*) as the original path if you wish to change all your paths.</para>
        /// <para>要重新映射的路径列表。包括存储在镶嵌数据集中的当前路径以及将更改该路径的路径。如果要更改所有路径，可以输入星号 （*） 作为原始路径。</para>
        /// </param>
        public RepairMosaicDatasetPaths(object _in_mosaic_dataset, object _paths_list)
        {
            this._in_mosaic_dataset = _in_mosaic_dataset;
            this._paths_list = _paths_list;
        }
        public override string ToolboxName => "Data Management Tools";

        public override string ToolName => "Repair Mosaic Dataset Paths";

        public override string CallName => "management.RepairMosaicDatasetPaths";

        public override List<string> AcceptEnvironments => ["extent", "parallelProcessingFactor"];

        public override object[] ParameterInfo => [_in_mosaic_dataset, _paths_list, _where_clause, _out_mosaic_dataset];

        /// <summary>
        /// <para>Mosaic Dataset</para>
        /// <para>The mosaic dataset with the broken paths.</para>
        /// <para>具有断开路径的镶嵌数据集。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Mosaic Dataset")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_mosaic_dataset { get; set; }


        /// <summary>
        /// <para>Paths List</para>
        /// <para>A list of the paths to remap. Include the current path stored in the mosaic dataset and the path to which it will be changed. You can enter an asterisk (*) as the original path if you wish to change all your paths.</para>
        /// <para>要重新映射的路径列表。包括存储在镶嵌数据集中的当前路径以及将更改该路径的路径。如果要更改所有路径，可以输入星号 （*） 作为原始路径。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Paths List")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _paths_list { get; set; }


        /// <summary>
        /// <para>Query Definition</para>
        /// <para>An SQL expression to limit the repairs to selected rasters within the mosaic dataset.</para>
        /// <para>一个 SQL 表达式，用于将修复限制为镶嵌数据集中的选定栅格。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Query Definition")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _where_clause { get; set; } = null;


        /// <summary>
        /// <para>Repaired Input Mosaic Dataset</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Repaired Input Mosaic Dataset")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _out_mosaic_dataset { get; set; }


        public RepairMosaicDatasetPaths SetEnv(object extent = null, object parallelProcessingFactor = null)
        {
            base.SetEnv(extent: extent, parallelProcessingFactor: parallelProcessingFactor);
            return this;
        }

    }

}